package cn.dust.design.pattern.behavioral.templatemethod;

/**
 * @Author: dust
 * @Date: 2019/11/27 17:47
 */
public abstract class ACourse {
    protected final void makeCourse(){
        makePPT();
        makeVideo();
        if(needWriteArticle()){
            this.writeArticle();
        }
        this.packageCourse();
    }

    final void makePPT(){
        System.out.println("制作PPT");
    }

    final void makeVideo(){
        System.out.println("制作视频");
    }

    final void writeArticle(){
        System.out.println("编写手记");
    }

    //钩子方法
    protected boolean needWriteArticle(){
        return false;
    }

    abstract void packageCourse();

}
